import pygame
from pygame.locals import *

import Tkinter
import tkMessageBox
import tkSimpleDialog
from Tkinter import *

from Fase import *
from Snake import *
from Comida import *
from Cenario import *
from Persistencia import *

snake = Snake()
comida = Comida()

cenario1 = Cenario('Cenario fase1')

fase1 = Fase('Fase1',cenario1)

pygame.init()

screen = pygame.display.set_mode((600,600))
pygame.display.set_caption('Hipersnake - Cristimas Snake')
score = 0
dirs = 0
fonte = pygame.font.SysFont('Arial',20)

recordes = Persistencia(score)

while True:
    for e in pygame.event.get():   # para a cobra se mexer
        if e.type == QUIT:
            sys.exit(0)
        elif e.type == KEYDOWN:     # dirs eh uma variavel que orienta o movimento da cobra, coerentemente
            if e.key == K_UP and dirs != 0:   # dirs representa numericamente a direcao do movimento da cobra
                dirs = 2
            elif e.key == K_DOWN and dirs != 2:
                dirs = 0
            elif e.key == K_LEFT and dirs != 1:
                dirs = 3
            elif e.key == K_RIGHT and dirs != 3:
                dirs = 1

    
    if score == 0:
        screen.blit(fonte.render('Fase 1',True,(255,0,0)),(400,0))
        print 'Blitou score %d' % score

    if score < 13:
        print 'score < 13'
        fase1.blitar_cenario_fase(cenario1)
        fase1.mudar_clock(4)
        if snake.verificar_colisao_cenario(cenario1):
            print 'Colidiu com o cenario'
            snake.morrer(screen,score,recordes)
        else:
            print 'Nao colidiu com o cenario'
            pass

    '''
    elif score == 13:
        screen.blit(fonte.render('Fase 2',True,(255,0,0)),(400,0))

    
    elif 13 < score < 23:
        fase2.blitar_cenario_fase()
        fase2.clock(6)
        if snake.verificar_colisao_cenario(cenario2):
            snake.morrer()
            
    elif score == 23:
        screen.blit(fonte.render('Fase 3',True,(255,0,0)),(400,0))

    elif 23 < score < 37:
        fase3.blitar_cenario_fase()
        fase3.clock(9)
        if snake.verificar_colisao_cenario(cenario3):
            snake.morrer()

    elif score == 37:
        screen.blit(fonte.render('Fase 4',True,(255,0,0)),(400,0))

    elif 37 < score:
        fase4.blitar_cenario_fase()
        fase4.clock(10)
        if snake.verificar_colisao_cenario(cenario4):
                snake.morrer()

    '''
    
    i = len(snake.xs)-1
    while i >= 2:
        if snake.colidir(snake.xs[0],snake.xs[i], snake.ys[0], snake.ys[i], 20, 20, 20, 20):   # se bater no proprio corpo
            snake.morrer(screen,score,recordes)
            print 'Colidiu com o proprio corpo'
        i -= 1

    
    if snake.colidir(snake.xs[0], comida.posicao[0], snake.ys[0], comida.posicao[1], 20, 10, 20, 10):  # se bater na comida
        score += 1
        snake.xs.append(700)    # faz a cobra crescer
        snake.ys.append(700)
        print 'Bateu na comida'
        comida.aparecer_imagem_comida(cenario1)
    
    '''
    if snake.verificar_colisao_comida(comida1):
        score += 1
        snake.xs.append(700)    # faz a cobra crescer
        snake.ys.append(700)
        comida1.escolher_posicao(cenario1)
        comida1.aparecer_imagem_comida(cenario1)
        print 'Colidiu com a comida - funcao2'
    
    '''
    if snake.xs[0] < 0 or snake.xs[0] > 580 or snake.ys[0] < 0 or snake.ys[0] > 580:    # se bater nas extremidades da tela
        print 'Bateu nas extremidades da tela - morreu'
        snake.morrer(screen,score,recordes)



    i = len(snake.xs)-1    # para comecar pegando o ultimo elemento da lista
    while i >= 1:
        snake.xs[i] = snake.xs[i-1]
        snake.ys[i] = snake.ys[i-1]
        i -= 1
    if dirs == 0:       # no comeco do jogo, a cobra estah descendo (y aumenta)
        snake.ys[0] += 20
    elif dirs == 1:
        snake.xs[0] += 20
    elif dirs == 2:
        snake.ys[0] -= 20
    elif dirs == 3:
        snake.xs[0] -= 20

    for i in range(len(snake.xs)-1):    # blitando as imagens da cobra
        screen.blit(snake.aparecer_imagem_cobra(),(snake.xs[i],snake.ys[i]))
        print 'Blitou imagem cobra'

    screen.blit(fonte.render(str(score),True,(0,255,0)), (200,0))
  
    '''
    i = 0
    if i == 0:
        comida.aparecer_imagem_comida(cenario1)
        i += 1
        print 'Apareceu primeira comida'
    else:
        pass
    '''

    pygame.display.update()
